﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using Crosland.Automotriz.Seguridad.ControlExeption;
using DevExpress.Web.ASPxGridView;
using DevExpress.Web.ASPxEditors;
using Crosland.Automotriz.Logic;
namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmPronosticoImportacionAprobacion2 : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        iFacadeAprobarPronostico BL_AprobarPronostico = new FacadeAprobarPronostico();
        iFacadePronosticoImportacion BL_PronosticoImportacion = new FacadePronosticoImportacion();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);
                this.listaEstado();
                this.FiltroSeleccionado();
                cargarGrilla_cabecera();
                this.LimpiarSession();

            }


        }
        private void FiltroSeleccionado()
        {

            try
            {
                if (Session["indexFocus"] != null) { dgPedido.FocusedRowIndex = Convert.ToInt32(Session["indexFocus"]); }
                if (Session["cboAnio"] != null) { cboAnio.Value = Session["cboAnio"].ToString(); } else { cboAnio.Value = Convert.ToString(DateTime.Now.Year); }
                if (Session["cboEstado"] != null) { cboEstado.Value = Session["cboEstado"].ToString(); } else { cboEstado.SelectedIndex = 0; }

            }
            catch (Exception ex)
            {

                lblmsj.Text = ex.Message;
                popupmsj2.ShowOnPageLoad = true;
                return;
            }

        }

        private void LimpiarSession()
        {

            Session["nro_pronostico"] = null;
            Session["peri_sal"] = null;
            Session["ANO_MES_INI"] = null;
            Session["ANO_MES_FIN"] = null;
            Session["ANO_INI"] = null;
            Session["ANO_FIN"] = null;
            Session["nro_pedido"] = null;
            Session["nro_pedido"] = null;

        }

        void listaEstado()
        {

            try
            {
                clsSolicitudAprobacionLogic solicituLogic = new clsSolicitudAprobacionLogic();
                cboEstado.DataSource = solicituLogic.listaEstadoNivel2();
                cboEstado.ValueField = "ID_ESTADO";
                cboEstado.TextField = "NOM_ESTADO";
                cboEstado.DataBind();
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "listaEstado");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "listaEstado");
            }


        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "GuardarExceptionLog");
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }





        MailMessage mail = new MailMessage();

        private void solitactarAprobacion()
        {

            try
            {


                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 3))
                {

                    this.EnvioCorreo("confirmado", "confirmó", txtobservacion, "Confirmación de pronóstico de importación Nro. ");
                    cargarGrilla_cabecera();

                    lblmsj.Text = "Se confirmó correctamente.";
                    popupmsj2.ShowOnPageLoad = true;


                }
                else
                {
                    lblmsj.Text = "Error al confirmar.";
                    popupmsj2.ShowOnPageLoad = true;
                }

            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "solitactarAprobacion");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "solitactarAprobacion");
            }

        }

        private void EnvioCorreo(String strTextAprobadoRechazado, String strTextApruebaRechaza, ASPxMemo ControlObservacion, String asunto)
        {
            int intIndex = dgPedido.FocusedRowIndex;
            if (intIndex == -1)
            {
                return;
            }
            clsUsuarioBL usu = new clsUsuarioBL();
          
            String strUsuario = dgPedido.GetRowValues(intIndex, "USER_NEW").ToString();
            List<Crosland.Automotriz.Core.V_Usuario> x = usu.listaUsuario(strUsuario);
            if (x != null)
            {
                String strCorreoSolicitante = x[0].DES_EMAIL.ToString();
                String strNombreApellidoSolicitante = x[0].DES_NOMBRE.ToString() + ' ' + x[0].DES_APELLIDOS.ToString();
                String strNroPronostico = dgPedido.GetRowValues(intIndex, "NRO_PRONOSTICO").ToString();

                List<Crosland.Automotriz.Core.V_Usuario> l = usu.listaUsuario(Session["User"].ToString());
                if (l != null)
                {
                    String strNombreAprobado = l[0].DES_NOMBRE.ToString() + ' ' + l[0].DES_APELLIDOS.ToString();
                    String strCorreoAprobado = l[0].DES_EMAIL.ToString();
                    String strAsunto = asunto + strNroPronostico;
                    String htmBody = String.Format(HtmlEmail.EnvioCorreoPronosticoAprobacion, strNombreApellidoSolicitante, strNroPronostico + " ha sido " + strTextAprobadoRechazado, strNombreAprobado + ", usuario que " + strTextApruebaRechaza + " el pronostico de importación: ", ControlObservacion.Text == "" ? "No existen comentarios" : ControlObservacion.Text);
                    Tools.SendEmail(strCorreoSolicitante, strCorreoAprobado, strAsunto, htmBody);
                }
            }
        }



        private void Rechazado()
        {

            try
            {

                if (BL_AprobarPronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 0))
                {
                    this.EnvioCorreo("rechazado", "rechazó", txtmemo, "Rechazo de confirmación de pronóstico de importación Nro. ");
                    cargarGrilla_cabecera();

                    Response.Redirect("~/Repuestos/wFrmPronosticoImportacionAprobacion1.aspx?id=" + idNegocio);

                }


            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "Rechazado");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "Rechazado");
            }


        }

        private void cargarGrilla_cabecera()
        {
            try
            {
                dgPedido.DataSource = BL_PronosticoImportacion.Listar_cabeceraPorConfirmar(Convert.ToInt32(cboAnio.Value), Convert.ToInt32(cboEstado.Value), Session["User"].ToString());
                dgPedido.DataBind();

            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "cargarGrilla_cabecera");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "cargarGrilla_cabecera");
            }

        }






        protected void dgPedido_PageIndexChanged(object sender, EventArgs e)
        {
            cargarGrilla_cabecera();
        }

        protected void btnfiltrar2_Click(object sender, EventArgs e)
        {
            cargarGrilla_cabecera();
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {


            solitactarAprobacion();
            txtobservacion.Text = string.Empty;


        }

        protected void btnrechazar_Click(object sender, EventArgs e)
        {

            Rechazado();
            txtmemo.Text = string.Empty;
        }

        protected void btndetalle_Click(object sender, EventArgs e)
        {
            if (dgPedido.FocusedRowIndex == -1)
            {

                lblmsj.Text = "Seleccioné un registro.";
                popupmsj2.ShowOnPageLoad = true;
                return;
            }
            int index = dgPedido.FocusedRowIndex;
            Session["indexFocus"] = index;
            Session["cboAnio"] = cboAnio.Value;
            Session["cboEstado"] = cboEstado.Value;
            Session["nro_pronostico"] = Convert.ToInt32(dgPedido.GetRowValues(index, "NRO_PRONOSTICO"));
            Session["peri_sal"] = Convert.ToInt32(dgPedido.GetRowValues(index, "peri_sal"));
            Session["ANO_MES_INI"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_INI"));
            Session["ANO_MES_FIN"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_FIN"));
            Session["ANO_INI"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_INI"));
            Session["ANO_FIN"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_FIN"));
            Session["nro_pedido"] = Convert.ToInt32(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO"));
            Session["nro_pedido"] = Convert.ToInt32(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO"));
            Session["page_origen"] = "wFrmPronosticoImportacionAprobacion2.aspx";
            Session["FECHA_GEN"] = Convert.ToDateTime(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "FECHA_GEN"));
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacionAprobacionListarDetalle.aspx?id=" + idNegocio);

        }

        protected void btnSalir1_Click(object sender, EventArgs e)
        {
            Session["indexFocus"] = null;
            Session["cboAnio"] = null;
            Session["cboEstado"] = null;
            Session["nro_pronostico"] = null;
            Session["peri_sal"] = null;
            Session["ANO_MES_INI"] = null;
            Session["ANO_MES_FIN"] = null;
            Session["ANO_INI"] = null;
            Session["ANO_FIN"] = null;
            Session["nro_pedido"] = null;
            Session["page_origen"] = null;
            Session["FECHA_GEN"] = null;
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnAprobacionPedido_Click(object sender, ImageClickEventArgs e)
        {
        }

        protected void btnRechazarSolicitud_Click(object sender, EventArgs e)
        {

            try
            {
                txtmemo.Text = string.Empty;
                txtobservacion.Text = string.Empty;

                if ((int)(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "ID_ESTADO")) == 2)
                {

                    popupRechazar.HeaderText = "Rechazar pronóstico Nro. " + dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO");
                    popupRechazar.ShowOnPageLoad = true;

                }
                else
                {

                    lblmsj.Text = "No puedes Rechazar";
                    popupmsj2.ShowOnPageLoad = true;


                }


            }
            catch (Exception re)
            {
                MensajesError(re.Message, re, "btnRechazarSolicitud_Click");
            }

        }

        protected void btnAprobacion1_Click(object sender, EventArgs e)
        {

            try
            {
                txtmemo.Text = string.Empty;
                txtobservacion.Text = string.Empty;


                if ((int)(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "ID_ESTADO")) == 2)
                {

                    PopupCorreo.HeaderText = "Confirmar pronóstico Nro. " + dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO");
                    PopupCorreo.ShowOnPageLoad = true;

                }
                else
                {

                    string script = "ShowErrorConfirmacion();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);

                }

            }
            catch (Exception ex)
            {
                MensajesError(ex.Message, ex, "btnAprobacion1_Click");
            }

        }



        protected void grdPronosticoParametrosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }


        protected void grdGrupoArticulosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }

        protected void btnAnalizar_Click(object sender, EventArgs e)
        {
            if (dgPedido.FocusedRowIndex == -1)
            {
                lblmsj.Text = "Seleccioné un registro.";
                popupmsj2.ShowOnPageLoad = true;
                return;
            }
            Session["nro_pronostico"] = dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO").ToString();
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacionReport.aspx?id=" + idNegocio);
        }

        protected void dgPedido_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.cargarGrilla_cabecera();
        }
    }
}